package top.szhome.framework.core.tools.util;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import top.szhome.framework.core.tools.exception.SzhomeException;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;
import java.util.List;

/**
 * 文件工具类
 *
 * @author 唐加利
 * @date 2023/7/23
 **/
@Slf4j
public class FileUtil {

    /**
     * 创建目录
     * @param dirs
     */
    public static void mkdirs(String dirs) {
        File file = new File(dirs);
        if(!file.exists()){
            file.mkdirs();
        }
    }

    /**
     * 创建目录
     * @param dirs
     */
    public static void mkdirs(File dirs) {
        if(!dirs.exists()){
            dirs.mkdirs();
        }
    }

    /**
     * 创建文件
     * @param file
     */
    public static File createFile(String file){
        File f = new File(file);
        if(f.isDirectory()){
            mkdirs(file);
            return f;
        }

        if(f.exists()){
            return f;
        }

        File dirs = f.getParentFile();
        mkdirs(dirs);
        try {
            f.createNewFile();
            return f;
        } catch (IOException e) {
            log.error("创建文件失败, file={}", file, e);
            throw new SzhomeException("500", "创建文件失败", e);
        }
    }

    /**
     * 文件写入
     * @param file
     * @param content
     */
    public static void write(File file, String content) throws IOException {
        try (OutputStream os = new FileOutputStream(file)){
            IOUtils.write(content.getBytes(StandardCharsets.UTF_8), os);
        }
    }

    /**
     * 文件写入
     * @param file
     * @param lines
     * @throws IOException
     */
    public static void write(File file, List<String> lines) throws IOException {
        IOUtils.writeLines(lines, System.lineSeparator(), new FileOutputStream(file), StandardCharsets.UTF_8);
    }

}
